package Q8_14_Boolean_Evaluation; import java.util.HashMap; import java.util.Map.Entry; import java.util.Random; public class Tester { public static boolean allEqual(HashMap<String, Integer> map) { int val = 0; for (Entry<String, Integer> e : map.entrySet()) { if (val != 0 && val != e.getValue()) { return false; } val = e.getValue(); } return true; } public static char getRandomOperator() { Random rand = new Random(); int r = rand.nextInt(3); char[] ops = {'^', '&', '|'}; return ops[r]; } public static String getRandomExpression() { Random rand = new Random(); int len = rand.nextInt(10) * 2 + 1; String s = ""; for (int i = 0; i < len; i++) { char next = '1'; if (i % 2 == 0) { next = rand.nextBoolean() ? '1' : '0'; } else { next = getRandomOperator(); } s += next; } return s; } public static void main(String[] args) { for (int i = 0; i < 50; i++) { //String terms = "0^0|1&1^1|0|1"; String terms = getRandomExpression(); boolean result = true; int oBF = Others.bruteForce(terms, new HashMap<String, Boolean>(), result, new boolean[(terms.length() - 1) / 2]); int oR = Others.countR(terms, result, 0, terms.length() - 1); int oDP = Others.countDP(terms, result, 0, terms.length() - 1, new HashMap<String, Integer>()); int oDPEFF = Others.countDPEff(terms, result, 0, terms.length() - 1, new HashMap<String, Integer>()); int a = QuestionA.countEval(terms, result); int b = QuestionB.countEval(terms, result); HashMap<String, Integer> results = new HashMap<String, Integer>(); results.put("oBF", oBF); results.put("oR", oR); results.put("oDP", oDP); results.put("oDPEFF", oDPEFF); results.put("a", a); results.put("b", b); if (allEqual(results)) { System.out.println("Success: " + terms + "->" + b); System.out.println(results.toString()); } else { System.out.println("Failure: " + terms); System.out.println(results.toString()); break; } } } }